/**
 * 第11章 多线程与并发编程实践
 * 代码清单-p3ch11a-337页a：生成唯一标识符的Java类 {@link top.kaoshanji.p3ch11a.IdGenerator}
 * 代码清单-p3ch11a-341页a：使用 volatile 变量作为循环结束的判断条件 {@link top.kaoshanji.p3ch11a.Worker}
 * 代码清单-p3ch11a-342页a：不可变对象的类的声明方式 {@link top.kaoshanji.p3ch11a.User}
 * 代码清单-p3ch11a-342页b：在构造方法中添加当前对象的引用的错误示例 {@link top.kaoshanji.p3ch11a.WrongUser}
 * 代码清单-p3ch11a-344页a：使用synchronized生成唯一标识符的Java类 {@link top.kaoshanji.p3ch11a.SynchronizedIdGenerator}
 * 代码清单-p3ch11a-348页a：通过join方法等待线程运行结束 {@link top.kaoshanji.p3ch11a.ThreadJoin}
 * 代码清单-p3ch11a-351页a：使用AtomicInteger类实现的生成唯一标识符的Java类 {@link top.kaoshanji.p3ch11a.AtomicIdGenerator}
 * 代码清单-p3ch11a-352页a：更新volatile对象引用AtomicReferenceFieldUpdater类的使用示例 {@link top.kaoshanji.p3ch11a.TreeNode}
 * 代码清单-p3ch11a-354页a：使用ReentrantLock类实现的生成唯一标识符的Java类 {@link top.kaoshanji.p3ch11a.LockIdGenerator}
 * 代码清单-p3ch11a-356页a：基于AbstractQueuedSynchronizer类的资源管理实现 {@link top.kaoshanji.p3ch11a.SimpleResourceManager}
 * author kaoshanji
 * ^_^
 * create time 2025/2/3 13:31
 */
package top.kaoshanji.p3ch11a;